perm filename SEE.OSA[SYS,ALS] blob
sn#001160 filedate 1972-07-28 generic text, type T, neo UTF8
00010 BEGIN "SEE"
00020 DEFINE ⊂="COMMENT"; ⊂ 5/22/72;
00030 ⊂ This program analyses TABLES.DAT and reports data which
00040 give some indication as to the table effectiveness;
00050
00060 REQUIRE "COMSUB.HDR[SYS,ALS]" SOURCE_FILE;
00070
00080 DEFINE DATSIZ="1280",BUFEXS="43",BUFSIZ="1323";
00100 DEFINE CR="'15",LF="'12",TB="'11",CRLF="CR&LF";
00105 REQUIRE "BLOCKS.HDR[SYS,THO]" SOURCE_FILE;
00122 INTEGER CHAN3,EOF;
00180 INTEGER I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,INK;
00190 INTEGER INTOT;
00200 EXTERNAL PROCEDURE SPOOL(STRING S; INTEGER IOCHAN,FLAGS);
00210 INTEGER ARRAY COHG1,COHB1,COHG2,COHB2[0:7];
00220 INTEGER ARRAY COHG3,COHB3[0:3];
00230 INTEGER ARRAY PH,APH,BPH,CPH[0:4];
00240 INTEGER ARRAY DPH,EPH,FPH[0:3,0:3,0:4];
00250
00255 TABIN(INTOT);
00450 N←INTOT;
00460
00465 CHAN3←3;
00470 OPEN(CHAN3,"DSK",0,0,10,0,0,EOF);
00480 ENTER(CHAN3,"SEESUM.DOC",0);
00490 OUT(CHAN3,TB&"SIGNATURE TABLE SUMMARY as of "&DATIME&CRLF&LF);
00500
00510 OUT(CHAN3,"INCNT="&CVS(INCNT[0])&CRLF);
00520 OUT(CHAN3,"Output values for input tables"&CRLF);
00530 SETFORMAT(1,0); P←0;
00540 FOR I←10 STEP 74 UNTIL INTOT*74-1 DO BEGIN
00550 OUT(CHAN3,CVXSTR(INNAM[P])&TB);
00560 FOR J←0 STEP 1 UNTIL 63 DO BEGIN
00570 K←(TABLES[I+J] LSH 32) LSH -32;
00580 IF (J MOD 8)=0 THEN OUT(CHAN3," ");
00590 OUT(CHAN3,CVS(K)); END;
00600 OUT(CHAN3,CRLF); P←P+1; END;
00610 OUT(CHAN3,CRLF);
00620
00630 OUT(CHAN3,CRLF&"Name"&TB&"TYPE"&TB&"Learn"&TB&"Gate"&TB&"IN1"&
00640 TB&"IN2"&TB&"IN3"&TB&"IN4"&TB&"IN5"&TB&"IN6"&CRLF&LF);
00650 FOR I←N*74 STEP 74 UNTIL TABSIZ-75 DO BEGIN
00660 IF LIST[N]≠0 THEN BEGIN IF LIST[N]≠1 THEN BEGIN "DECODE"
00670 STRING LEARN;INTEGER K1,K2,K3,K4;
00680 IF LIST[N+LISSIZ%10]≥CVSIX("Q0") THEN BEGIN
00690 K←LIST[N+LISSIZ%5]; K1←K LSH -18; K2←(K LSH 18) LSH -30;
00700 K3←(K LSH 24) LSH -30; K4←(K LSH 30) LSH -30;
00710 LEARN←CVXSTR(PHLIST[K1])[1 TO 2]&CVXSTR(PHLIST[K2])[1 TO 2]&
00720 CVXSTR(PHLIST[K3])[1 TO 2]&CVXSTR(PHLIST[K4])[1 TO 2];
00730 END
00740 ELSE LEARN←CVXSTR(LIST[N+LISSIZ%5]);
00750
00760 OUT(CHAN3,CVXSTR(LIST[N])&TB&CVXSTR(LIST[N+LISSIZ%10])&
00770 LEARN&TB&CVXSTR(LIST[N+3*LISSIZ%10])&TB&
00780 CVXSTR(LIST[N+4*LISSIZ%10])&TB&
00790 CVXSTR(LIST[N+LISSIZ%2])&TB&CVXSTR(LIST[N+6*LISSIZ%10])&TB&
00800 CVXSTR(LIST[N+7*LISSIZ%10])&TB&CVXSTR(LIST[N+8*LISSIZ%10])&TB&
00810 CVXSTR(LIST[N+9*LISSIZ%10])&CRLF); END "DECODE"; END ELSE DONE;
00820 OUT(CHAN3,CRLF);
00830
00840 IF LIST[N+LISSIZ%10]<CVSIX("Q0") THEN BEGIN
00850 L←M←P←Q←O←R←S←V←W←0;
00860 FOR J←0 STEP 1 UNTIL 63 DO BEGIN
00870 K←TABLES[I+J+10];
00880 L←L+((K LSH 16) LSH -20);
00890 M←M+(K LSH -20);
00900 O←O+((K LSH 32) LSH -32);
00910 IF ((K LSH 33) LSH -33)≥4 THEN V←V+1 ELSE W←W+1;
00920 T←(K LSH 16) LSH -20; U←K LSH -20;
00930 IF T≥U THEN BEGIN P←P+T; Q←Q+U; END
00940 ELSE BEGIN R←R+U; S←S+T; END;
00950 END;
00960 O←O LSH -6;
00970 J←(P*100)%(P+S); K←(Q*100)%(P+Q);
00980 SETFORMAT(2,0);
00990 OUT(CHAN3," #+ "&CVS(L)&" #- "&CVS(M)&" Average output "&
01000 CVS(O)&" #≥4 "& CVS(V)&" #≤3 "&CVS(W)&CRLF);
01010 L←(R*100)%(Q+R); M←(S*100)%(R+S);
01020 OUT(CHAN3,CRLF&TB&TB&"Find"&TB&"Tare"&TB&"Find¬"&TB&"Tare¬"&CRLF);
01030 OUT(CHAN3,TB&"Out"&TB&CVS(J)&TB&CVS(K)&TB&CVS(L)&TB&CVS(M)&CRLF);
01040
01050 K←TABLES[I+1];
01060 INK←(K LSH 6) LSH -30;
01070
01080 ⊂ **** P2 ****;
01090 IF INK=2 THEN BEGIN
01100
01110 FOR J←0 STEP 1 UNTIL 7 DO COHG1[J]←COHB1[J]←COHG2[J]←COHB2[J]←0;
01120 FOR J←0 STEP 1 UNTIL 7 DO
01130 FOR K←0 STEP 1 UNTIL 7 DO BEGIN
01140 L←(J LSH 3)+K+I+10;
01150 M←TABLES[L]; O←((M LSH 16) LSH -20); P←(M LSH -20);
01160 COHG1[K]←COHG1[K]+O; COHB1[K]←COHB1[K]+P;
01170 COHG2[J]←COHG2[J]+O; COHB2[J]←COHB2[J]+P;
01180 END;
01190 P←Q←R←S←0;
01200 FOR K←0 STEP 1 UNTIL 7 DO
01210 IF COHG1[K]≥COHB1[K] THEN BEGIN P←P+COHG1[K];Q←Q+COHB1[K];END
01220 ELSE BEGIN R←R+COHB1[K]; S←S+COHG1[K]; END;
01230 J←(P*100)%(P+S); K←(Q*100)%(P+Q);
01240 L←(R*100)%(Q+R); M←(S*100)%(R+S);
01250 OUT(CHAN3,TB&"IN1"&TB&CVS(J)&TB&CVS(K)&TB&CVS(L)&TB&CVS(M)&CRLF);
01260 P←Q←R←S←0;
01270 FOR J←0 STEP 1 UNTIL 7 DO
01280 IF COHG2[J]≥COHB2[J] THEN BEGIN P←P+COHG2[J];Q←Q+COHB2[J];END
01290 ELSE BEGIN R←R+COHB2[J]; S←S+COHG2[J]; END;
01300 J←(P*100)%(P+S); K←(Q*100)%(P+Q);
01310 L←(R*100)%(Q+R); M←(S*100)%(R+S);
01320 OUT(CHAN3,TB&"IN2"&TB&CVS(J)&TB&CVS(K)&TB&CVS(L)&TB&CVS(M)&CRLF);
01330
01340
01350 ⊂ **** P3 ****;
01360 END ELSE IF INK=3 THEN BEGIN
01370
01380 FOR J←0 STEP 1 UNTIL 3 DO
01390 COHG1[J]←COHB1[J]←COHG2[J]←COHB2[J]←COHG3[J]←COHB3[J]←0;
01400 FOR J←0 STEP 1 UNTIL 3 DO
01410 FOR K←0 STEP 1 UNTIL 3 DO FOR L←0 STEP 1 UNTIL 3 DO BEGIN
01420 M←(J LSH 4)+(K LSH 2)+L+I+10;
01430 Q←TABLES[M]; O←((Q LSH 16) LSH -20); P←(Q LSH -20);
01440 COHG1[L]←COHG1[L]+O; COHB1[L]←COHB1[L]+P;
01450 COHG2[K]←COHG2[K]+O; COHB2[K]←COHB2[K]+P;
01460 COHG3[J]←COHG3[J]+O; COHB3[J]←COHB3[J]+P;
01470 END;
01480 P←Q←R←S←T←U←0;
01490 FOR L←0 STEP 1 UNTIL 3 DO
01500 IF COHG1[L]≥COHB1[L] THEN BEGIN P←P+COHG1[L];Q←Q+COHB1[L];END
01510 ELSE BEGIN R←R+COHB1[L]; S←S+COHG1[L]; END;
01520 J←(P*100)%(P+S); K←(Q*100)%(P+Q);
01530 L←(R*100)%(Q+R); M←(S*100)%(R+S);
01540 OUT(CHAN3,TB&"IN1"&TB&CVS(J)&TB&CVS(K)&TB&CVS(L)&TB&CVS(M)&CRLF);
01550 FOR K←0 STEP 1 UNTIL 3 DO
01560 IF COHG2[K]≥COHB2[K] THEN BEGIN P←P+COHG2[K];Q←Q+COHB2[K];END
01570 ELSE BEGIN R←R+COHB2[K]; S←S+COHG2[K]; END;
01580 J←(P*100)%(P+S); K←(Q*100)%(P+Q);
01590 L←(R*100)%(Q+R); M←(S*100)%(R+S);
01600 OUT(CHAN3,TB&"IN2"&TB&CVS(J)&TB&CVS(K)&TB&CVS(L)&TB&CVS(M)&CRLF);
01610 FOR J←0 STEP 1 UNTIL 3 DO
01620 IF COHG3[J]≥COHB3[J] THEN BEGIN P←P+COHG3[J];Q←Q+COHB3[J];END
01630 ELSE BEGIN R←R+COHB3[J]; S←S+COHG3[J]; END;
01640 J←(P*100)%(P+S); K←(Q*100)%(P+Q);
01650 L←(R*100)%(Q+R); M←(S*100)%(R+S);
01660 OUT(CHAN3,TB&"IN3"&TB&CVS(J)&TB&CVS(K)&TB&CVS(L)&TB&CVS(M)&CRLF);
01670
01680
01690 END; ⊂ CHANGE TO END ELSE to add 6-input case;
01700
01710 ⊂ **** Q ****;
01720 END ELSE BEGIN ⊂ Start of Q;
01730 IF I>(TABSIZ -149) THEN DONE;
01740 L←M←P←Q←R←S←T←0;
01750 FOR J←0 STEP 1 UNTIL 63 DO BEGIN
01760 K←TABLES[I+10+J];
01770 L←L+((K LSH 2) LSH -20);
01780 K←TABLES[I+84+J]; ⊂ Get second half of Q table;
01790 M←M+(K LSH - 27);
01800 P←P+((K LSH 9) LSH -27);
01810 Q←Q+((K LSH 18) LSH -27);
01820 R←R+((K LSH 27) LSH -27);
01830 END; SETFORMAT(1,0);
01840 OUT(CHAN3," Usage- N.A. "&CVS(L)&" Ph1 "&CVS(M)&
01850 " Ph2 "&CVS(P)& " Ph3 "&CVS(Q)&" Ph4 "&CVS(R)&CRLF&LF);
01860
01870 OUT(CHAN3,TB&" N.A."&TB);
01880 FOR J←1 STEP 1 UNTIL 4 DO
01890 OUT(CHAN3,TB&TB&" PH"&CVS(J)&TB); OUT(CHAN3,CRLF);
01900 FOR J←0 STEP 1 UNTIL 4 DO
01910 OUT(CHAN3,TB&"Find"&TB&"Tare"&TB); OUT(CHAN3,CRLF&"OUT");
01920
01930 FOR J←0 STEP 1 UNTIL 4 DO APH[J]←BPH[J]←CPH[J]←0;
01940 FOR J←0 STEP 1 UNTIL 63 DO BEGIN
01950 K←TABLES[J+I+10]; PH[0]←(K LSH 2) LSH -20;
01960 K←TABLES[J+I+74]; PH[1]←K LSH -27; PH[2]←(K LSH 9) LSH -27;
01970 PH[3]←(K LSH 18) LSH -27; PH[4]←(K LSH 27) LSH -27;
01980 X←0; FOR L←0 STEP 1 UNTIL 4 DO
01990 IF PH[L]>X THEN BEGIN X←PH[L]; K←L; END;
02000 FOR L←0 STEP 1 UNTIL 4 DO BEGIN
02010 IF L=K THEN APH[L]←APH[L]+ PH[L] ELSE BPH[K]←BPH[K]+ PH[L];
02020 CPH[L]←CPH[L]+ PH[L]; END; END;
02030 FOR J←0 STEP 1 UNTIL 4 DO BEGIN
02040 K←(APH[J]*100)%CPH[J]; L←(BPH[J]*100)%(APH[J]+BPH[J]);
02050 OUT(CHAN3,TB&CVS(K)&TB&CVS(L)&TB); END; OUT(CHAN3,CRLF);
02060
02070 K←TABLES[I+1];
02080 K←(K LSH 6) LSH -30;
02090
02100 ⊂ **** Q2 ****;
02110 IF INK=2 THEN BEGIN
02120
02130 OUT(CHAN3,CRLF);
02140
02150 ⊂ **** Q3 ****;
02160 END ELSE IF INK=3 THEN BEGIN
02170
02180 FOR J←0 STEP 1 UNTIL 3 DO FOR K←0 STEP 1 UNTIL 3 DO
02190 FOR L←0 STEP 1 UNTIL 4 DO DPH[J,K,L]←EPH[J,K,L]←FPH[J,K,L]←0;
02200
02210 ⊂ **** Get PH values;
02220 FOR J←0 STEP 1 UNTIL 3 DO
02230 FOR K←0 STEP 1 UNTIL 3 DO
02240 FOR L←0 STEP 1 UNTIL 3 DO BEGIN
02250 R←(J LSH 4)+(K LSH 2)+L+I+10;
02260 M←TABLES[R]; PH[0]←(M LSH 2) LSH -20;
02270 M←TABLES[R+74]; PH[1]←M LSH -27; PH[2]←(M LSH 9) LSH -27;
02280 PH[3]←(M LSH 18) LSH -27; PH[4]←(M LSH 27) LSH -27;
02290 FOR P←0 STEP 1 UNTIL 4 DO BEGIN
02300 DPH[K,L,P]←DPH[K,L,P]+PH[P]; ⊂ ex J corresponds to exIN3;
02310 EPH[L,J,P]←EPH[L,J,P]+PH[P]; ⊂ ex K corresponds to exIN2;
02320 FPH[J,K,P]←FPH[J,K,P]+PH[P]; END; END;
02330
02340 OUT(CHAN3,"ex1"); ⊂ Now treat exIN1 data alone;
02350
02360 FOR L←0 STEP 1 UNTIL 4 DO APH[L]←BPH[L]←CPH[L]←0;
02370 FOR J←0 STEP 1 UNTIL 3 DO
02380 FOR K←0 STEP 1 UNTIL 3 DO BEGIN
02390 X←0; FOR L←0 STEP 1 UNTIL 4 DO
02400 IF FPH[J,K,L]>X THEN BEGIN X←FPH[J,K,L]; O←L; END;
02410 FOR L←0 STEP 1 UNTIL 4 DO BEGIN
02420 IF L=O THEN APH[L]←APH[L]+FPH[J,K,L] ELSE
02430 BPH[O]←BPH[O]+FPH[J,K,L];
02440 CPH[L]←CPH[L]+FPH[J,K,L]; END; END;
02450 FOR J←0 STEP 1 UNTIL 4 DO BEGIN
02460 K←(APH[J]*100)%CPH[J]; L←(BPH[J]*100)%(APH[J]+BPH[J]);
02470 OUT(CHAN3,TB&CVS(K)&TB&CVS(L)&TB); END; OUT(CHAN3,CRLF);
02480
02490 OUT(CHAN3,"ex2");
02500
02510 FOR L←0 STEP 1 UNTIL 4 DO APH[L]←BPH[L]←CPH[L]←0;
02520 FOR J←0 STEP 1 UNTIL 3 DO
02530 FOR K←0 STEP 1 UNTIL 3 DO BEGIN
02540 X←0; FOR L←0 STEP 1 UNTIL 4 DO
02550 IF EPH[J,K,L]>X THEN BEGIN X←EPH[J,K,L]; O←L; END;
02560 FOR L←0 STEP 1 UNTIL 4 DO BEGIN
02570 IF L=O THEN APH[L]←APH[L]+FPH[J,K,L] ELSE
02580 BPH[O]←BPH[O]+FPH[J,K,L];
02590 CPH[L]←CPH[L]+FPH[J,K,L]; END; END;
02600 FOR J←0 STEP 1 UNTIL 4 DO BEGIN
02610 K←(APH[J]*100)%CPH[J]; L←(BPH[J]*100)%(APH[J]+BPH[J]);
02620 OUT(CHAN3,TB&CVS(K)&TB&CVS(L)&TB); END; OUT(CHAN3,CRLF);
02630
02640 OUT(CHAN3,"ex3");
02650
02660 FOR L←0 STEP 1 UNTIL 4 DO APH[L]←BPH[L]←CPH[L]←0;
02670 FOR J←0 STEP 1 UNTIL 3 DO
02680 FOR K←0 STEP 1 UNTIL 3 DO BEGIN
02690 X←0; FOR L←0 STEP 1 UNTIL 4 DO
02700 IF DPH[J,K,L]>X THEN BEGIN X←DPH[J,K,L]; O←L; END;
02710 FOR L←0 STEP 1 UNTIL 4 DO BEGIN
02720 IF L=O THEN APH[L]←APH[L]+FPH[J,K,L] ELSE
02730 BPH[O]←BPH[O]+FPH[J,K,L];
02740 CPH[L]←CPH[L]+FPH[J,K,L]; END; END;
02750 FOR J←0 STEP 1 UNTIL 4 DO BEGIN
02760 K←(APH[J]*100)%CPH[J]; L←(BPH[J]*100)%(APH[J]+BPH[J]);
02770 OUT(CHAN3,TB&CVS(K)&TB&CVS(L)&TB); END; OUT(CHAN3,CRLF);
02780
02790
02800 ⊂ **** Q6 ****;
02810 END ELSE IF INK=6 THEN BEGIN
02820
02830 OUT(CHAN3,TB&"TOTAL USAGE"&CRLF);
02840 OUT(CHAN3,
02850 "IN6↓ IN3→ 0 1"&CRLF&
02860 " IN5↓ IN2→ 0 1 0 1"
02870 &CRLF&
02880 " IN4↓ IN1→ 0 1 0 1 0 1 0 1"
02890 &CRLF&LF);
02900 FOR J←0 STEP 1 UNTIL 1 DO BEGIN
02910 FOR K←0 STEP 1 UNTIL 1 DO BEGIN
02920 FOR L←0 STEP 1 UNTIL 1 DO BEGIN
02930 W←I+10+(J LSH 5)+(K LSH 4)+(L LSH 3);
02940 SETFORMAT(2,0); OUT(CHAN3," ");
02950 IF L=0 THEN BEGIN
02960 IF K=0 THEN OUT(CHAN3,CVS(J)) ELSE OUT(CHAN3," ");
02970 OUT(CHAN3,CVS(K)); END ELSE OUT(CHAN3," ");
02980 OUT(CHAN3,CVS(L)&" ");
02990 SETFORMAT(5,0);
03000 FOR M←0 STEP 1 UNTIL 1 DO BEGIN
03010 FOR O←0 STEP 1 UNTIL 1 DO BEGIN
03020 FOR P←0 STEP 1 UNTIL 1 DO BEGIN
03030 X←W+(M LSH 2)+(O LSH 1)+P;
03040 Q←TABLES[X];
03050 R←((Q LSH 2) LSH -20);
03060 Q←TABLES[X+74];
03070 R←R+(Q LSH -27)+((Q LSH 9) LSH -27)+((Q LSH 18) LSH -27)+
03080 ((Q LSH 27) LSH -27);
03090 IF R=0 THEN OUT(CHAN3," ") ELSE OUT(CHAN3,CVS(R)&" ");
03100 END;
03110 OUT(CHAN3," ");
03120 END;
03130 OUT(CHAN3," ");
03140 END;
03150 OUT(CHAN3,CRLF);
03160 IF L≠0 THEN OUT(CHAN3,LF);
03170 END;
03180 END;
03190 END;
03200 OUT(CHAN3,TB&"OUTPUT VALUES"&CRLF);
03210 OUT(CHAN3,
03220 "IN6↓ IN3→ 0 1"&CRLF&
03230 " IN5↓ IN2→ 0 1 0 1"
03240 &CRLF&
03250 " IN4↓ IN1→ 0 1 0 1 0 1 0 1"
03260 &CRLF&LF);
03270 SETFORMAT(1,0);
03280
03290 FOR J←0 STEP 1 UNTIL 1 DO BEGIN
03300 FOR K←0 STEP 1 UNTIL 1 DO BEGIN
03310 FOR L←0 STEP 1 UNTIL 1 DO BEGIN
03320 W←I+10+(J LSH 5)+(K LSH 4)+(L LSH 3);
03330 SETFORMAT(2,0); OUT(CHAN3," ");
03340 IF L=0 THEN BEGIN
03350 IF K=0 THEN OUT(CHAN3,CVS(J)) ELSE OUT(CHAN3," ");
03360 OUT(CHAN3,CVS(K)); END ELSE OUT(CHAN3," ");
03370 OUT(CHAN3,CVS(L)&" ");
03380 SETFORMAT(1,0);
03390 FOR M←0 STEP 1 UNTIL 1 DO BEGIN
03400 FOR O←0 STEP 1 UNTIL 1 DO BEGIN
03410 FOR P←0 STEP 1 UNTIL 1 DO BEGIN
03420 X←W+(M LSH 2)+(O LSH 1)+P;
03430 Q←TABLES[X];
03440 R←(Q LSH 18) LSH -33;
03450 S←(Q LSH 21) LSH -33;
03460 T←(Q LSH 24) LSH -33;
03470 U←(Q LSH 27) LSH -33;
03480 V←(Q LSH 30) LSH -33;
03490 OUT(CHAN3,CVS(R)&CVS(S)&CVS(T)&CVS(U)&CVS(V)&" ");
03500 END;
03510 OUT(CHAN3," ");
03520 END;
03530 OUT(CHAN3," ");
03540 END;
03550 OUT(CHAN3,CRLF);
03560 IF L≠0 THEN OUT(CHAN3,LF);
03570 END;
03580 END;
03590 END;
03600 END; ⊂ End of INK=6;
03610 I←I+74; N←N+1;
03620 END; ⊂ End of Q;
03630 OUT(CHAN3,CRLF);
03640 IF I>TABSIZ -75 THEN DONE;
03650 N←N+1; IF LIST[N]=0 THEN DONE; END;
03660 CLOSE(CHAN3);
03670 RELEASE(CHAN3);
03680 SPOOL("SEESUM.DOC",GETCHAN,1);
03690 OUTSTR("Output sent to spooler as SEESUM.DOC");
03700
03710 END "SEE";